#!/usr/bin/env python3

# idl2deb - quick hack by W. Martin Borgert <debacle@debian.org> to create
# Debian GNU/Linux packages from idl2wrs modules for Wireshark.
# Copyright 2003, 2008, W. Martin Borgert

# Wireshark - Network traffic analyzer
# By Gerald Combs <gerald@wireshark.com>
# Copyright 1998 Gerald Combs

# SPDX-License-Identifier: GPL-2.0-or-later

import optparse
import os
import string
import sys
import time

scriptinfo = """idl2deb version 2008-03-10
Copyright 2003, 2008, W. Martin Borgert
Free software, released under the terms of the GPL."""

def create_file(preserve, filename, content, mode = None):
    """Create a file with given content."""
    if preserve and os.path.isfile(filename):
        return
    f = open(filename, 'w')
    f.write(content)
    f.close()
    if mode:
        os.chmod(filename, mode)

def create_files(version, deb, email, idl, name, preserve, iso, rfc):
    """Create all files for the .deb build process."""
    base = os.path.basename(idl.lower().split(".idl")[0])

    if not os.path.isdir("packaging/debian"):
        os.mkdir("packaging/debian")

    create_file(preserve, "packaging/debian/rules", """#!/usr/bin/make -f

include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/class/autotools.mk

PREFIX=`pwd`/packaging/debian/wireshark-giop-%s

binary-post-install/wireshark-giop-%s::
	rm -f $(PREFIX)/usr/lib/wireshark/plugins/%s/*.a
""" % (base, base, version), 0o755)

    create_file(preserve, "packaging/debian/control", """Source: wireshark-giop-%s
Section: net
Priority: optional
Maintainer: %s <%s>
Standards-Version: 3.6.1.0
Build-Depends: wireshark-dev, autotools-dev, debhelper, cdbs

Package: wireshark-giop-%s
Architecture: any
Depends: wireshark (= %s), ${shlibs:Depends}
Description: GIOP dissector for CORBA interface %s
 This package provides a dissector for GIOP (General Inter-ORB
 Protocol) for the Wireshark protocol analyser.  It decodes the CORBA
 (Common Object Request Broker Architecture) interfaces described
 in the IDL (Interface Definition Language) file '%s.idl'.
""" % (base, name, email, base, deb, base, base))

    create_file(preserve, "packaging/debian/changelog",
            """wireshark-giop-%s (0.0.1-1) unstable; urgency=low

  * Automatically created package.

 -- %s <%s>  %s
""" % (base, name, email, rfc))

    create_file(preserve, "packaging/debian/copyright",
            """This package has been created automatically by idl2deb on
%s for Debian GNU/Linux.

Wireshark: https://www.wireshark.org/

Copyright:

GPL, as evidenced by existence of GPL license file \"COPYING\".
(the GNU GPL may be viewed on Debian systems in
/usr/share/common-licenses/GPL)
""" % (iso))

def get_wrs_version():
    """Detect version of wireshark-dev package."""
    deb = os.popen(
        "dpkg-query -W --showformat='${Version}' wireshark-dev").read()
    debv = string.find(deb, "-")
    if debv == -1:
        debv = len(deb)
    version = deb[string.find(deb, ":")+1:debv]
    return version, deb

def get_time():
    """Detect current time and return ISO and RFC time string."""
    currenttime = time.gmtime()
    return time.strftime("%Y-%m-%d %H:%M:%S +0000", currenttime), \
           time.strftime("%a, %d %b %Y %H:%M:%S +0000", currenttime)

def main():
    opts = process_opts(sys.argv)
    iso, rfc = get_time()
    version, deb = get_wrs_version()
    create_files(version, deb,
                 opts.email, opts.idl, opts.name, opts.preserve,
                 iso, rfc)
    os.system("dpkg-buildpackage " + opts.dbopts)

def process_opts(argv):
    """Process command line options."""
    parser = optparse.OptionParser(
        version=scriptinfo,
        description="""Example:
%prog -e me@foo.net -i bar.idl -n \"My Name\" -d \"-rfakeroot -uc -us\"""")
    parser.add_option("-d", "--dbopts",
                      default="", metavar="opts",
                      help="options for dpkg-buildpackage")
    parser.add_option("-e", "--email", metavar="address",
                      default="invalid@invalid.invalid",
                      help="use e-mail address")
    parser.add_option("-i", "--idl", metavar="idlfile",
                      help="IDL file to use (mandatory)")
    parser.add_option("-n", "--name", default="No Name",
                      help="use user name", metavar="name")
    parser.add_option("-p", "--preserve", action="store_true",
                      help="do not overwrite files")
    opts, args = parser.parse_args()
    if not opts.idl:
        print("mandatory IDL file parameter missing")
        sys.exit(1)
    if not os.access(opts.idl, os.R_OK):
        print("IDL file not accessible")
        sys.exit(1)
    return opts

if __name__ == '__main__':
    main()
